/********************************************************************************************************************************
 * 《C ++ Primer》第五版中文版，读书笔记：按照书中的的示例源码和每一个小章节的课后习题，自己动手写代码实现，作为联系和测试。
 * Date: 2024-03-28 11:57
 * Author: dimon.chen 
 * EMali: 1181302388@qq.com 
 * 
 * 章节:  第三章 字符串，向量和数组
 *       标准库类型 string
 *       标准库类型 vector
 *       内置类型数组
 *       3.2 string 类型初始化
 *       3.2.2 string对象上的操作
 * 
 ********************************************************************************************************************************/

/// 标准库类型string
///
///

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main(int argc, char *argv[])
{

#if 0
    string s;           //默认初始化，一个空串
    cin >> s;           //将string对象读入s,遇到空白字符停止
    cout << s << endl;  //输出s




    string s1, s2;
    cin >> s1 >> s2;
    cout << s1 << s2 << endl;
#endif

    string s;                           //默认初始化
    //while(cin >> s)
        cout << s << endl;



    string line;                        //默认初始化，一个空串
    while(getline(cin, line)){             //从标准输入流中读入字符串，并存入string对象s，getline返回结果为它的is流参数
        if(!line.empty())
            cout << "you enter :\"" << line << "\"" << endl;
        else
            cout << "you enter empty string" << endl;
    }


    string s1("Hello");                 //直接初始化，s1对象是"Hello"字符串所有字符，除了空字符外
    string s2(s1);                      //直接初始化，s2是s1的副本
    string s3 = "Value";                //赋值初始化，s3是字符串字面值的所有字符，除了空字符外
    string s4(5, 'c');                  //赋值初始化，s4的值是 ccccc
    string s5 = s4;                     //赋值初始化，s5是s4的副本

    cout << "s1=" << s1 << endl;
    cout << "s2=" << s2 << endl;
    cout << "s3=" << s3 << endl;
    cout << "s4=" << s4 << endl;
    cout << "s5=" << s5 << endl;


    string line1;                    //默认初始化，一个空串
    while(getline(cin , line1)){
        if(!line1.empty())
            cout << "read line is: " << line << endl;
    }

    string::size_type len = line.size();
    cout << "len=" << len << endl;


    string str1(10, 'c'), str2;     //str1直接初始化，用指定字符c重复10的字符序列是str1的值, str2默认初始化时一个空串
    cout << "str1=" << str1 << " str2=" << str2 << endl;
    str1 = str2;                    //用str2对象的副本替换掉str1对象的内容
                                    //此时str2和str1都是空串
    cout << "str1=" << str1 << " str2=" << str2 << endl;



    string s9 = "Hello", s10 = ", World\n";
    cout << "s9= " << s9 << endl;
    cout << "s10=" << s10 << endl;

    string s11 = s9 + s10;
    s9 += s10;                  //等价于 s9 = s9 + s10

    cout << "s9= " << s9 << endl;
    cout << "s10=" << s10 << endl;
    cout << "s11=" << s11 << endl;


    return 0;
}
